"""
脚本模型类
"""
from typing import Dict, Any, List
from datetime import datetime


class ScriptRule:
    """
    脚本规则模型类，表示一条匹配规则
    """
    
    def __init__(self, rule_type: str, pattern: str, is_regex: bool = False):
        """
        初始化脚本规则对象
        
        @param rule_type: 规则类型（contains, equals, startswith, endswith, regex）
        @param pattern: 匹配模式
        @param is_regex: 是否是正则表达式
        """
        self.rule_type = rule_type
        self.pattern = pattern
        self.is_regex = is_regex
    
    def to_dict(self) -> Dict[str, Any]:
        """
        将脚本规则对象转换为字典
        
        @return: 字典表示
        """
        return {
            "rule_type": self.rule_type,
            "pattern": self.pattern,
            "is_regex": self.is_regex
        }
    
    def __str__(self) -> str:
        """
        返回脚本规则的字符串表示
        
        @return: 字符串表示
        """
        return f"ScriptRule(type='{self.rule_type}', pattern='{self.pattern}')"


class Script:
    """
    脚本模型类，表示一个自动回复脚本
    """
    
    def __init__(self, id: str, name: str, rules: List[ScriptRule], reply: str, 
                 enabled: bool = True, priority: int = 0, 
                 timestamp: str = None, metadata: Dict[str, Any] = None):
        """
        初始化脚本对象
        
        @param id: 脚本 ID
        @param name: 脚本名称
        @param rules: 匹配规则列表
        @param reply: 回复内容
        @param enabled: 是否启用
        @param priority: 优先级（数字越大优先级越高）
        @param timestamp: 时间戳（ISO 格式字符串），如果为 None 则使用当前时间
        @param metadata: 元数据，包含额外信息
        """
        self.id = id
        self.name = name
        self.rules = rules
        self.reply = reply
        self.enabled = enabled
        self.priority = priority
        self.timestamp = timestamp or datetime.now().isoformat()
        self.metadata = metadata or {}
        
        # 解析时间戳
        try:
            self.datetime = datetime.fromisoformat(self.timestamp)
        except (ValueError, TypeError):
            self.datetime = datetime.now()
    
    def to_dict(self) -> Dict[str, Any]:
        """
        将脚本对象转换为字典
        
        @return: 字典表示
        """
        return {
            "id": self.id,
            "name": self.name,
            "rules": [rule.to_dict() for rule in self.rules],
            "reply": self.reply,
            "enabled": self.enabled,
            "priority": self.priority,
            "timestamp": self.timestamp,
            "metadata": self.metadata
        }
    
    def __str__(self) -> str:
        """
        返回脚本的字符串表示
        
        @return: 字符串表示
        """
        return f"Script(id='{self.id}', name='{self.name}', rules={len(self.rules)})" 